/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
  /**
   * 1.从nums1尾端开始循环，循环长度为m+n
   * 2.声明两个变量i、j分别是为循环中比较的两个值的下标
   * 2.判断条件：
   *   a.当数组nums2下标j小于0时（意味着nums2数组已经遍历完毕，此时将nums1剩余元素插入到相应位置）
   *   b.当数组nums1下标i大于等于0且nums1[i]大于等于nums2[j]时
   *   满足上列两个条件之一时：将nums1[i]的复制到循环中的当前位置，且i的值减一
   *   反之将nums2[j]的复制到循环中的当前位置，且j的值减一
   */
  let i = m - 1;
  let j = n - 1;
  for (let l = m + n - 1; l >= 0; l--) {
    if (j < 0 || (i >=0 && nums1[i] >= nums2[j])) {
      nums1[l] = nums1[i];
      i--;
    } else {
      nums1[l] = nums2[j];
      j--;
    }
  }
};